#ifndef REALIZACIONDEPARTIDA_H_
#define REALIZACIONDEPARTIDA_H_

#include "EstadoDelJuego.h"
#include "JuegoServerImp.h"
#include "EstadoDeRealizacionDePartida.h"


class RealizacionDePartida : public EstadoDelJuego
{
private:
	JuegoServerImp* juego;
	EstadoDeRealizacionDePartida* estadoDeRefuerzoYreubicacion;
	EstadoDeRealizacionDePartida* estadoDeAtaque;
	EstadoDeRealizacionDePartida* estadoDeFortificacionDeUnidades;
	
	EstadoDeRealizacionDePartida* estado;
public:
	RealizacionDePartida(JuegoServerImp* juego);
	virtual void unirse(Jugador* jugador) {
		std::cerr<<"Esta accion no es valida para este estado"<<std::endl;
	}
		
	void asignarEjercitos() {
		std::cerr<<"Esta accion no es valida para este estado"<<std::endl;
	}
	
	virtual void reforzarEjercitos(Jugador* jugador) {
		estado->reforzarEjercitos(jugador);
	}
	
	void colocarEjercitos(Jugador* jugador, Territorio* territorio, unsigned int cantidadDeEjercitos) {
		estado->colocarEjercitos(jugador,territorio,cantidadDeEjercitos);
	}
		
	void realizarAtaque(Ataque* ataque) {
		estado->realizarAtaque(ataque);
	}
	
	
	void moverEjercitos(Jugador* jugador, Territorio* origen, Territorio* destino, unsigned int cantidadDeEjercitos) {
		estado->moverEjercitos(jugador,origen,destino,cantidadDeEjercitos);
	}
	
	void setEstado(EstadoDeRealizacionDePartida* estado) {
		this->estado = estado;
	}
	EstadoDeRealizacionDePartida* getEstadoDeAtaque() {
		return estadoDeAtaque;
	}
	EstadoDeRealizacionDePartida* getEstadoDeFortificacionDeUnidades() {
		return estadoDeFortificacionDeUnidades;
	}
	EstadoDeRealizacionDePartida* getEstadoDeRefuerzoYReubicacion() {
		return estadoDeRefuerzoYreubicacion;
	}
	
	JuegoServerImp* getJuego();
	
	virtual ~RealizacionDePartida();
};

#endif /*REALIZACIONDEPARTIDA_H_*/
